]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
messageTray: Provide a hook for customizing banners
authorFlorian Müllner <fmuellner@gnome.org>
Tue, 17 Feb 2015 02:27:11 +0000 (03:27 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Fri, 20 Feb 2015 16:41:56 +0000 (17:41 +0100)
While we want to encourage the use of regular notification banners,
some of our built-in stuff does require more or less customized content
("more" being chat notifications, a.k.a. king of custom).
Account for this use case by delegating banner creation to a method,
so either Notification or Source subclasses can overwrite it.

js/ui/messageTray.js

index 81d8412adcecd37d116ad4b91a68deb6352b1879..a29d93b7ff12a5ca41ed953f4b69eb8c9285ddff 100644 (file)
@@ -1080,6 +1080,15 @@ const Notification = new Lang.Class({
         this.actor.add_style_class_name('notification-unexpanded');
     },
 
+    // Allow customizing the banner UI:
+    // the default implementation defers the creation to
+    // the source (which will create a NotificationBanner),
+    // so customization can be done by subclassing either
+    // Notification or Source
+    createBanner: function() {
+        return this.source.createBanner(this);
+    },
+
     activate: function() {
         this.emit('activated');
         // We hide all types of notifications once the user clicks on them because the common
@@ -1376,6 +1385,10 @@ const Source = new Lang.Class({
         this.emit('title-changed');
     },
 
+    createBanner: function(notification) {
+        return new NotificationBanner(notification);
+    },
+
     // Called to create a new icon actor.
     // Provides a sane default implementation, override if you need
     // something more fancy.
@@ -1876,7 +1889,7 @@ const MessageTray = new Lang.Class({
             this.idleMonitor.add_user_active_watch(Lang.bind(this, this._onIdleMonitorBecameActive));
         }
 
-        this._banner = new NotificationBanner(this._notification);
+        this._banner = this._notification.createBanner();
         this._bannerClickedId = this._banner.connect('done-displaying',
                                                      Lang.bind(this, this._escapeTray));
         this._bannerUnfocusedId = this._banner.connect('unfocused', Lang.bind(this, function() {